/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.ejb.endpointwebservice;

import com.sun.xml.ws.developer.StatefulWebServiceManager;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateful;
import javax.inject.Inject;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.soap.Addressing;
import org.ejb.controlador.servicioWeb.ServicioWebController;
import org.ejb.persistencia.Binjuego;
import org.ejb.persistencia.Juegos;
import org.ejb.persistencia.Usuarios;
import org.ejb.persistencia.Xmljuego;

/**
 *
 * @author MoisesAntonio
 */
@Stateful
@WebService
@Addressing
public class ServicioWeb implements Serializable {
    
    @Inject
    ServicioWebController servicio;
    
    
    /**
     * Este método realiza el login de los usuarios a través del servicio web.
     * @param nombre Nombre de usuario.
     * @param pass Contraseña del usuario.
     * @return Valor booleano indicando si el login es correcto.
     */
    @WebMethod
    public synchronized Usuarios logIn(String nombre, String pass){
        servicio.getCredencial().setUsername(nombre);
        servicio.getCredencial().setPassword(pass);
        servicio.getLogin().doLogin();
        return servicio.getLogin().getUsuario();
    }
    
    /**
     * Devuelve una lista con los juegos que tiene el usuario en el sistema.
     * @param u Usuario.
     * @return Lista de juegos.
     */
    @WebMethod
    public List<Juegos> listarJuegos(Usuarios u){
        return servicio.listarJuegos(u);
    }
    
   
    @WebMethod
    public Juegos crearJuego(Juegos j, Usuarios u){
        return servicio.crearJuego(u, j);
    }
    
    /*
    @WebMethod
    public int cargarJuego(int id){
        
    }*/
    
    @WebMethod
    public void subirXmlJuego(Xmljuego x){
        servicio.subirXmlJuego(x);
    }
    
    @WebMethod
    public void subirBin(Binjuego b){
        servicio.subirBinJuego(b);
    }
    
    @WebMethod
    public boolean actualizarXml(){
        
        return false;
    }
    
    @WebMethod
    public boolean actualizarBin(){
        
        return false;
    }
    
    /**
     * Devuelve los Xml's que representan el juego.
     * @param j El juego del que se quiere cargar los datos.
     * @return Un objeto Xmljuego con los dos xml del juego (info y game).
     */
    @WebMethod
    public Xmljuego cargarXml(Juegos j){
        return servicio.cargarXmlJuego(j);
    }
    
    /**
     * Devuelve todos los objetos binarios que representan el juego, esta operación puede tardar.
     * @param j El juego del que se quiere cargar los datos.
     * @return Lista de todos los objetos binarios, todos en objeto Binjuego.
     */
    @WebMethod
    public List<Binjuego> cargarBin(Juegos j){
        return servicio.cargarBinJuego(j);
    }
    
    /**
     * Sirve para establecer si un juego debe o no ser público
     * @param publico True si es público, False, si no lo es.
     * @param j Juego a publicar.
     * @return Devuelve el mismo valor que se le ha introducido, en caso de fallo, el valor contrario.
     */
    @WebMethod
    public boolean publicarJuego(boolean publico, Juegos j){
        if(servicio.getLogin().isLoggedInUser()){
            return servicio.publicarJuego(publico,j);
        }
        return !publico;
    }
    
    /*
    @WebMethod
    public boolean eliminarJuego(){
        if(login.isLoggedInUser()){
            
        }
        return false;    
    }
    */
}
